#pragma once

using namespace std;

#include "../IGameState.h"
#include <vector>

#include "../../SGD Wrappers/CSGD_Direct3D.h"
#include "../../SGD Wrappers/CSGD_DirectInput.h"
#include "../../SGD Wrappers/CSGD_TextureManager.h"
#include "../../SGD Wrappers/CSGD_XAudio2.h"

#include "../../Tokens/BaseToken.h"
#include "../../Tiles/TileManager.h"

class CSGD_Direct3D;
class CSGD_DirectInput;
class CSGD_TextureManager;
class CSGD_XAudio2;
class CObjectManager;
class CScriptManager;
class CInitEnemyScript;

//note: MFD
class Animation;
class CEmitterManager;

class CGamePlayState :
		public IGameState
{
public:

	static CGamePlayState* GetInstance( void );

	void	Enter	( void );
	void	Exit	( void );
	bool	Input	( void );
	void	Update	( float fElapsedTime );
	void	Render	( void );

private:

	CGamePlayState( void );
	~CGamePlayState( void );

	CSGD_Direct3D*			m_pD3D;
	CSGD_DirectInput*		m_pDI;
	CSGD_TextureManager*	m_pTM;
	CSGD_XAudio2*			m_pXA;
	CObjectManager*			m_pOM;
	CScriptManager*			m_pSM;

	short m_sSongID;
	short m_sSoundEffectID;
	short m_sPlayerImgID;
	short m_sGroundEnemyImgID;
	short m_sAirEnemyImgID;
	short m_sMageEnemyImgID;
	short m_sSentinelEnemyImgID;
	short m_sBossImgID;
	short m_sPickUpImgID;

	CEmitterManager* testEManager;
	
	vector<Animation*> m_vTestAnimation;
	CTileManager* m_pTileM;

	CInitEnemyScript* m_pEnemyScript;
};